1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| bs4是什么 ? 是一个Python的第三方模块, 用来解析html数据, 其提供的api接口非常的人性化. 安装 : pip install bs4 pip install lxml 这是一个解析器, 用来将文档生成对象 有可能出现问题 : 将pip源 切换为国内源, 国内源 : 豆瓣源, 阿里源等 如何切换国内源 : (1) 指令切换, -i 源地址 只针对于这一次的指令 (2) 永久切换, 在指定地方写一个配置文件即可 Windows : (1) 在文件资源管理器上面输入 %appdata% (2) 手动创建一个pip的文件夹 (3) 新建一个文件 pip.ini (4) 写入如下内容 : [global] timeout = 6000 index-url = http://pypi.douban.com/simple trusted-host = pypi.douban.com Linux : (1) cd ~ (2) mkdir ~/.pip (3) vi ~/.pip/pip.conf (4) 编辑内容和Windows的内容一模一样 语法学习 : from bs4 import BeautifulSoup 步骤 : 通过BeautifulSoup这个类, 可以将你的html文档生成一个对象, 然后这个对象会有一些方法供你使用, 就可以得到你想要的节点内容, 或者节点属性 可以将本地文件或者网络文件生成对象, 先从本地开始学习 (1) 根据标签名进行查找 soup.a 只能得到第一个符合要求的标签 (2) 获取属性 soup.a.attrs 返回一个字典, 里面包含所有的属性和值 soup.a.attrs['href'] soup.a['href'] (3) 获取内容 obj.string obj.text obj.get_text() 如果标签里只有内容, 那么三那个获取的结果都一样 如果标签里面还有标签, 那么第一个获取的是None, 后两个获取的是纯文本内容 (4)find方法 soup.find('a', title='xxx') soup.find('a', id='xxx') soup.find('a', class_='xxx') 返回一个对象,只能找到第一个符合要求的节点 选看: soup.find('a', class_ = re.compile(r'xxx')) 可以写正则表达式, 一般用的不多 (5) find_all方法 返回一个列表, 列表里面都是对象 用法和上面的find一样, 只不过这个是找到所有, find只是找到一个 soup.find_all('a', limit=2) 取出前两个 (6) select方法 根据选择器得到自己想要的节点 常用的选择器 : 标签选择器 a div 类选择器 .lala .dudu id选择器 #lala #dudu 后代选择器 div .lala a : 后面的是前面的子节点就行 div > p > a : 后面的必须是前面的直接子节点才行 群组选择器 div, #lala, .dudu 属性选择器 input[name=xxx] dic[class=xxx] 返回的是一个列表, 就算选择器精确到一个, 也是一个列表, 列表中只有一个对象 也可以通过子对象来查找内容, 得到当前子对象里面符合要求的标签内容 soup是整个文档对象
|